接續Day01的null值,dart還有一個特色叫做null-aware operators,null-aware operators對於處理nullable value是很方便的工具,null-aware operators可以檢查那個變數是不是null值。
??=
只有在變數為null值的時候才能附予變數值
int? a; // = null
a ??= 3;
print(a); // <-- Prints 3.
a ??= 5;
print(a); // <-- Still prints 3.
我們可以把??當作if-null operator,當變數只有為null的時候才能利用=賦予值,上述的程式碼可以看到當a = 3時,??=不會更新a的值。
...?
可以檢查要append的List, Map, 和Set是否為null,如果是null就不append
void main(){
List<int> lowerNumber = [1,2,3,4,5];
List<int> upperNumbers = [6,8,9,0];
lowerNumber = [...lowerNumber,...?upperNumbers];
print('numbers are ${lowerNumber}');
}
numbers are [1, 2, 3, 4, 5, 6, 8, 9, 0]
但當我們加上一個空list
List<int> listNull;
lowerNumber = [...lowerNumber, ...?listNull];
print('new list are ${lowerNumber}');
Error compiling to JavaScript:
Info: Compiling with sound null safety
lib/main.dart:5:37:
Warning: Operand of null-aware operation '...?' has type 'List<int>' which excludes null.
- 'List' is from 'dart:core'.
利用...?加入空list會發生錯誤,map和set同理,因此當我們使用...?可以快速檢查接下來要加的collection是否為空
接下來是flutter裡使用率很高的一種operator, ?.
可以保護空物件裡的method或property的存取
myObject?.someProperty
上述程式碼等同於:
(myObject != null) ? myObject.someProperty : null
如果物件或物件的property為null,那使用?.會使其回傳null並且不呼叫那個空物件或property用到的相關method
今天介紹了一些方便的null相關的operator,在開發App時常常會使用物件,當我們使用?去檢查null時也可以保護變數為null時的存取,希望大家喜歡今天的文章。
參考資料:
https://dart.dev/codelabs/dart-cheatsheet
https://www.geeksforgeeks.org/dart-null-aware-operators/#:~:text=Null%2Daware%20operators%20are%20used,is%20initialized%20with%20nothing%20like.